package tp.disenio.client;

import java.util.ArrayList;

import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyEvent;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.Widget;

//CU-004 Crear Competencia Deportiva

public class AltaCompetenciaDeportiva extends Composite{
	private Button btnHome;
	private PushButton pshbtnCancelar;
	private PushButton pshbtnAceptar;
	private PushButton pshbtnAgregar;
	private PushButton pshbtnVaciar;
	private ListBox listBxModalidad;
	private ListBox listBxDeporte;
	private ListBox listBxTipoPuntuacion;
	private ListBox listBxLugaresRealizacion;
	private ListBox listBxLugaresRealizacionElegidos;
	private TextArea textAreaReglamento;
	private TextBox txtbxNombre;
    private TextBox textBoxPtosPartidoGanado;
	private TextBox textBoxPtosEmpate;
	private TextBox textBoxPtsPorPresentarse;
	private TextBox textBoxCantidadSets;
	private TextBox textBoxTantosPartidoGanadoPorNoPresentarseContrincante;
	private TextBox textBoxDisponibilidad;
	private Label TantosPartidoGanadoPorNoPresentarseContrincante;
	private Label lblPuntosPorPartido;
	private Label lblUsuario;
	private Label lblSalir;
	private Label lblPuntosPorPresentarse;
	private Label lblCantidadSets;
	private CheckBox chckbxPtosEmpate;
	

	public AltaCompetenciaDeportiva(String user) {
		
		
		final RootPanel rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		
		// WIDGETS
		
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
		
		pshbtnAgregar = new PushButton("Agregar");
		absolutePanel.add(pshbtnAgregar, 860, 200);
		
		pshbtnVaciar = new PushButton("Vaciar");
		absolutePanel.add(pshbtnVaciar, 860, 260);
		
		pshbtnAceptar = new PushButton("Aceptar");
		absolutePanel.add(pshbtnAceptar, 466, 450);
		
		pshbtnCancelar = new PushButton("Cancelar");
		absolutePanel.add(pshbtnCancelar, 538, 450);
		
		listBxDeporte = new ListBox();
		absolutePanel.add(listBxDeporte, 295, 230);
		listBxDeporte.setSize("169px", "22px");
		listBxDeporte.setTabIndex(2);
		
		
		listBxModalidad = new ListBox();
		listBxModalidad.addItem("UNO");
		listBxModalidad.addItem("DOS");
		listBxModalidad.addItem("TRES");
		absolutePanel.add(listBxModalidad, 295, 270);
		listBxModalidad.setSize("169px", "22px");
		
		listBxLugaresRealizacion = new ListBox();
		absolutePanel.add(listBxLugaresRealizacion, 520, 205);
		listBxLugaresRealizacion.setSize("169px", "22px");
//		listBxLugaresRealizacion.setVisibleItemCount(15);
		
		listBxLugaresRealizacionElegidos = new ListBox();
		absolutePanel.add(listBxLugaresRealizacionElegidos, 520, 250);
		listBxLugaresRealizacionElegidos.setSize("300px", "50px");
		listBxLugaresRealizacionElegidos.setVisibleItemCount(5);
		
		listBxTipoPuntuacion = new ListBox();
		listBxTipoPuntuacion.addItem("UNO");
		listBxTipoPuntuacion.addItem("DOS");
		listBxTipoPuntuacion.addItem("TRES");
		absolutePanel.add(listBxTipoPuntuacion, 658, 310);
		listBxTipoPuntuacion.setSize("130px", "22px");
				
		chckbxPtosEmpate = new CheckBox("   Puntos por empate:");
		chckbxPtosEmpate.setStyleName("label");
		absolutePanel.add(chckbxPtosEmpate, 213, 350);
		
		// TEXTBOX
		
		txtbxNombre = new TextBox();
		absolutePanel.add(txtbxNombre, 295, 185);
		txtbxNombre.setSize("200", "30");
		
		txtbxNombre.setTabIndex(1);
			
		textBoxPtosPartidoGanado = new TextBox();
		absolutePanel.add(textBoxPtosPartidoGanado, 400, 310);
		textBoxPtosPartidoGanado.setSize("70px", "15px");
		
		textBoxPtosEmpate = new TextBox();
		absolutePanel.add(textBoxPtosEmpate, 400, 350);
		textBoxPtosEmpate.setSize("70px", "15px");
		
		textBoxPtsPorPresentarse = new TextBox();
		absolutePanel.add(textBoxPtsPorPresentarse, 400, 390);
		textBoxPtsPorPresentarse.setSize("70px", "15px");
		
		textAreaReglamento = new TextArea();
		absolutePanel.add(textAreaReglamento, 520, 360);
		textAreaReglamento.setSize("381px", "66px");
		
		textBoxCantidadSets = new TextBox();
		absolutePanel.add(textBoxCantidadSets,880,310);
		textBoxCantidadSets.setSize("20px", "15px");
		
		textBoxTantosPartidoGanadoPorNoPresentarseContrincante = new TextBox();
		absolutePanel.add(textBoxTantosPartidoGanadoPorNoPresentarseContrincante,880,310);
		textBoxTantosPartidoGanadoPorNoPresentarseContrincante.setSize("20px", "15px");
		
		textBoxDisponibilidad = new TextBox();
		absolutePanel.add(textBoxDisponibilidad,815,200);
		textBoxDisponibilidad.setSize("20px", "15px");
		
		// LABELS
		
		Label lblDisponibilidad = new Label("Disponibilidad: ");
		lblDisponibilidad.setStyleName("labelClickable");
		absolutePanel.add(lblDisponibilidad, 700, 205);
		lblDisponibilidad.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				Window.alert("Debe ser un numero mayor a 0 y menor o igual a 100, sin contener caracteres distintos a numeros");
				
			}
		});
		
		
		lblUsuario = new Label("");
		lblUsuario.setText(user);
		lblUsuario.setStyleName("usuarioLabel");
		absolutePanel.add(lblUsuario, 820, 95);
		
		lblSalir = new Label("Salir");
		lblSalir.setStyleName("usuarioLabel");
		absolutePanel.add(lblSalir, 780, 95);
		
		
		Label lblCrearNuevaCompetencia = new Label("Crear Nueva Competencia");
		lblCrearNuevaCompetencia.setStyleName("subTitulo");
		absolutePanel.add(lblCrearNuevaCompetencia, 283, 135);
		
		Label lblNombre = new Label("Nombre");
		lblNombre.setStyleName("label");
		absolutePanel.add(lblNombre, 211, 190);
		
		Label lblDeporte = new Label("Deporte");
		lblDeporte.setStyleName("label");
		absolutePanel.add(lblDeporte, 211, 235);
		
		Label lblModalidad = new Label("Modalidad");
		lblModalidad.setStyleName("label");
		absolutePanel.add(lblModalidad, 211, 270);
		
		Label lblLugaresDeRealizacion = new Label("Lugares de Realizacion");
		lblLugaresDeRealizacion.setStyleName("label");
		absolutePanel.add(lblLugaresDeRealizacion, 637, 180);
				
		lblPuntosPorPartido = new Label("Puntos por partido ganado:");
		lblPuntosPorPartido.setStyleName("label");
		absolutePanel.add(lblPuntosPorPartido, 214, 315);
	
		lblPuntosPorPresentarse = new Label("Puntos por presentarse:");
		lblPuntosPorPresentarse.setStyleName("label");
		absolutePanel.add(lblPuntosPorPresentarse, 214, 390);
		lblPuntosPorPresentarse.setSize("156px", "18px");
				
		Label lblFormaDePuntuacion = new Label("Tipo de Puntuacion");
		lblFormaDePuntuacion.setStyleName("label");
		absolutePanel.add(lblFormaDePuntuacion, 520, 310);
		lblFormaDePuntuacion.setSize("138px", "18px");
		
		lblCantidadSets = new Label("Cantidad");
		lblCantidadSets.setStyleName("label");
		absolutePanel.add(lblCantidadSets, 800, 310);
		lblCantidadSets.setSize("100px", "18px");

		TantosPartidoGanadoPorNoPresentarseContrincante = new Label("Tantos por abandono");
		TantosPartidoGanadoPorNoPresentarseContrincante.setStyleName("label");
		absolutePanel.add(TantosPartidoGanadoPorNoPresentarseContrincante, 800, 305);
		TantosPartidoGanadoPorNoPresentarseContrincante.setSize("100px", "18px");
						
		Label lblReglamento = new Label("Reglamento");
		lblReglamento.setStyleName("label");
		absolutePanel.add(lblReglamento, 520, 335);
					
		getLblPuntosPorPartido().setVisible(false);
		getTxtBxPtsPartidoGanado().setVisible(false);
		getChckbxPuntosEmpate().setVisible(false);
		getTxtBxPtsEmpate().setVisible(false);
		getLblPuntosPorPresentarse().setVisible(false);
		getTxtBxPtsPorPresentarse().setVisible(false);
		getLblCantidadSets().setVisible(false);
		getTextBoxCantidadSets().setVisible(false);
		getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(false);
		getTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(false);
		
		
		//Limpiando listboxs
			getListBxDeporte().clear();getListBxModalidad().clear();getListBxTipoPuntuacion().clear();getListBxLugaresRealizacion().clear();
				
		// Inicializando listboxs
			
			agregarCamposListBox("listbxDeporte");
			agregarCamposListBox("listbxModalidad");
			agregarCamposListBox("listbxTipodepuntuacion");
			getListBxLugaresRealizacion().addItem("");
				
				
	
		// HANDLERS
		
		getLblUsuario().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				Window.alert("Modficar Datos Usuario ");
				
			}
		});
		
		
		getLblSalir().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
				Window.alert("Usted se ha deslogeado");
				
			}
		});
		
		getListBxDeporte().addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				
				getListBxLugaresRealizacion().clear();
				getListBxLugaresRealizacionElegidos().clear();
				
				String deporte = getListBxDeporte().getItemText(getListBxDeporte().getSelectedIndex());
				
				agregarCamposListBoxLugaresDeRealizacion(deporte);
				
			}

			
		});
		
		
		
		getListBoxModalidad().addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				
				String seleccion = getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex());
				if(seleccion.equals("Liga")){
					
					getLblPuntosPorPartido().setVisible(true);
					getTxtBxPtsPartidoGanado().setVisible(true);
					getChckbxPuntosEmpate().setVisible(true);
					getTxtBxPtsEmpate().setVisible(false);
					getLblPuntosPorPresentarse().setVisible(true);
					getTxtBxPtsPorPresentarse().setVisible(true);

								
				}
				else{
					
					getLblPuntosPorPartido().setVisible(false);
					getTxtBxPtsPartidoGanado().setVisible(false);
					getChckbxPuntosEmpate().setVisible(false);
					getTxtBxPtsEmpate().setVisible(false);
					getLblPuntosPorPresentarse().setVisible(false);
					getTxtBxPtsPorPresentarse().setVisible(false);
	
				}
				
			}
		});
	
		getChckbxPuntosEmpate().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				if(getChckbxPuntosEmpate().getValue()){
					getTxtBxPtsEmpate().setVisible(true);
				}
				else{
					
					getTxtBxPtsEmpate().setVisible(false);
				}
			}
		});
		
		
		
	   getListBxTipoPuntuacion().addChangeHandler(new ChangeHandler() {
		
		@Override
		public void onChange(ChangeEvent event) {
				
			String seleccion = getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex());
			
			if(seleccion.equals("Sets")){
				
				
				getLblCantidadSets().setVisible(true);
				getTextBoxCantidadSets().setVisible(true);
				getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(false);
				getTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(false);
				getTextBoxCantidadSets().setText("");
				
			}
			else if(seleccion.equals("Puntuacion")){
				
				getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(true);
				getTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(true);
				getLblCantidadSets().setVisible(false);
				getTextBoxCantidadSets().setVisible(false);
				getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setText("");
						
			}
			else{
				
				getLblCantidadSets().setVisible(false);
				getTextBoxCantidadSets().setVisible(false);
				getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(false);
				getTantosPartidoGanadoPorNoPresentarseContrincante().setVisible(false);
			}
			
		}
	  });
	  
	   
	   getBtnHome().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new HomeUA(getLblUsuario().getText()),100,50);
			   
			}
		});
		
		
	   getPshbtnCancelar().addClickHandler(new ClickHandler() {
		
		@Override
		public void onClick(ClickEvent event) {
			
//			setVisibilidad(false);
			rootPanel.remove(rootPanel.getWidget(1));
			rootPanel.add(new ListarCompetenciasDeportivasUA(getLblUsuario().getText()),100,45);
		}
	});
	   
	   
	   
	   getPshbtnAceptar().addClickHandler(new ClickHandler() {
		
		
		final AltaCompetenciaServiceAsync altaCompetenciaService = GWT.create(AltaCompetenciaService.class);
		   
		@Override
		public void onClick(ClickEvent event) {
	
			 AsyncCallback<String> callback = new AsyncCallback<String>() {
				 
				@Override
				public void onSuccess(String result) {
						
//						setVisibilidad(false);
						rootPanel.remove(rootPanel.getWidget(1));
						Window.alert((String)result);
						rootPanel.add(new ListarCompetenciasDeportivasUA(getLblUsuario().getText()),100,45);
						 					
				}
					
				
				@Override
			    public void onFailure(Throwable caught) {
			     
					Window.alert(caught.getMessage());
			    }

			
			  };
			  
			  	
			  
			  try
			  {
				    validarCampos();
//				     
//				    System.out.println("Label usuario: "+getLblUsuario().getText() +">");
//				    System.out.println("Nombre: "+getTxtbxNombre().getText() +">");
//				    System.out.println("Deporte: "+getListBxDeporte().getItemText(getListBxDeporte().getSelectedIndex())+">");
//				    System.out.println("Modalidad: "+getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex())+">");
//				    System.out.println("PG: "+Integer.parseInt(getTextBoxPtosPartidoGanado().getText())+">");
//				    System.out.println("PE: "+Integer.parseInt(getTextBoxPtosEmpate().getText())+">");
//				    System.out.println("Tantos: "+getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().getText()+">");
//				    System.out.println("SETS: "+getTextBoxCantidadSets().getText()+">");
//				    System.out.println("CHK: "+getChckbxPuntosEmpate().getValue()+">");
//				    System.out.println("PP: "+Integer.parseInt(getTextBoxPtsPorPresentarse().getText())+">");
//				    System.out.println("TP: "+getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex())+">");
//				    System.out.println("Sets: "+Integer.parseInt(getTextBoxCantidadSets().getText())+">");
//				    System.out.println("Tantos: "+Integer.parseInt(getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().getText())+">");
//				    System.out.println("Reglamento: "+getTxtAreaReglamento().getText()+">");
//				    			    
				    ArrayList<DisponibilidadDTO> disponibilidades = new ArrayList<DisponibilidadDTO>();
				    disponibilidades = generarDisponibilidades();
						    
				    altaCompetenciaService.altaCompetencia(getLblUsuario().getText(), getTxtbxNombre().getText(),getListBxDeporte().getItemText(getListBxDeporte().getSelectedIndex()),
				    									   getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex()), Integer.parseInt(getTextBoxPtosPartidoGanado().getText()),
				    									   Integer.parseInt(getTextBoxPtosEmpate().getText()), getChckbxPuntosEmpate().getValue(), Integer.parseInt(getTextBoxPtsPorPresentarse().getText()),
				    									   disponibilidades,getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()),
				    									   Integer.parseInt(getTextBoxCantidadSets().getText()),Integer.parseInt(getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().getText()),
				    									   getTxtAreaReglamento().getText(), callback);
				 			
			  }
	
			  catch (IllegalArgumentException mensaje) 
			  {
				
				  	Window.alert(mensaje.getMessage());
			  }

					
			  
			  
				
		}
	});
	   
	   
	   getPshbtnAgregar().addClickHandler(new ClickHandler() {
		
		@Override
		public void onClick(ClickEvent event) {
		

			  
			  if(getTextBoxCantidadSets().getText().equals("-1")){
				  	getTextBoxCantidadSets().setText("");
			  }
			  
			  if(getTantosPartidoGanadoPorNoPresentarseContrincante().equals("-1")){
				  
				  getTantosPartidoGanadoPorNoPresentarseContrincante().setText("");
			  }
			  
			  if(getTextBoxPtosEmpate().getText().equals("-1")){
				  
				  getTextBoxPtosEmpate().setText("");
			  }
			  if(getTextBoxPtosPartidoGanado().getText().equals("-1")){
				  
				  getTextBoxPtosPartidoGanado().setText("");

			  }
			  if(getTextBoxPtsPorPresentarse().getText().equals("-1")){
				  getTextBoxPtsPorPresentarse().setText("");  
			  }
			
			try{
				validarCamposLugaresDeRealizacion();
				getListBxLugaresRealizacionElegidos().addItem(getListBxLugaresRealizacion().getItemText(getListBxLugaresRealizacion().getSelectedIndex())+"                  Disponibilidad: "+getTextBoxDisponibilidad().getText());
				getListBxLugaresRealizacion().removeItem(getListBxLugaresRealizacion().getSelectedIndex());
				
			}
			catch (Exception e) {
				Window.alert(e.getMessage());
			}
							
		}
	});
	   
	   getPshbtnVaciar().addClickHandler(new ClickHandler() {
		
		@Override
		public void onClick(ClickEvent event) {
			
			getListBxLugaresRealizacionElegidos().clear();
			getListBxLugaresRealizacion().clear();
			agregarCamposListBoxLugaresDeRealizacion(getListBxDeporte().getItemText(getListBxDeporte().getSelectedIndex()));
			
		}
	});
	   
	   //TAB INDEX
	   
	   getBtnHome().setTabIndex(1);
	   getTxtbxNombre().setTabIndex(2);
	   getListBxDeporte().setTabIndex(3);
	   getListBoxModalidad().setTabIndex(4);
	   
	   getTextBoxPtosPartidoGanado().setTabIndex(5);
	   getChckbxPuntosEmpate().setTabIndex(6);
	   getTextBoxPtosEmpate().setTabIndex(7);
	   getTextBoxPtsPorPresentarse().setTabIndex(8);
	   
	   
	   getListBxLugaresRealizacion().setTabIndex(9);
	   getTextBoxDisponibilidad().setTabIndex(10);
	   getPshbtnAgregar().setTabIndex(11);
	   getListBxLugaresRealizacionElegidos().setTabIndex(12);
	   getPshbtnVaciar().setTabIndex(13);
	   getListBxTipoPuntuacion().setTabIndex(14);
	   
	   getTextBoxCantidadSets().setTabIndex(15);
	   getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setTabIndex(15);
	   
	   getTxtAreaReglamento().setTabIndex(16);
	   getPshbtnAceptar().setTabIndex(17);
	   getPshbtnCancelar().setTabIndex(18);
	   
	   
	   
	   
	   
	}
	
	public boolean validarCamposLugaresDeRealizacion()throws IllegalArgumentException{
		
		if((getListBxLugaresRealizacion().getItemText(getListBxLugaresRealizacion().getSelectedIndex()).equals(" ")
				|| getListBxLugaresRealizacion().getItemText(getListBxLugaresRealizacion().getSelectedIndex()).equals("")
				|| getTextBoxDisponibilidad().getText().equals("")
				|| !validarDisponibilidad(getTextBoxDisponibilidad().getText()))){
			
			throw new IllegalArgumentException("Disponibilidad o lugar de realizacion incorrecto");
			
		}
	   
		return true;
	}
	
	private boolean validarDisponibilidad(String disponibilidad){
		
		boolean retorno = true;
		
		for(int i=0; i<disponibilidad.length();i++){
			
			if(		   disponibilidad.charAt(i)!='1'
					&& disponibilidad.charAt(i)!='2'
					&& disponibilidad.charAt(i)!='3'
					&& disponibilidad.charAt(i)!='4'
					&& disponibilidad.charAt(i)!='5'
					&& disponibilidad.charAt(i)!='6'
					&& disponibilidad.charAt(i)!='7'
					&& disponibilidad.charAt(i)!='8'
					&& disponibilidad.charAt(i)!='9'
					&& disponibilidad.charAt(i)!='0'
					){
				retorno = false;
			}
		}
		
		if(retorno && (Integer.parseInt(disponibilidad)<1 || Integer.parseInt(disponibilidad)>100)){
			
			retorno = false;
		}
		
		return retorno;
		
	}
	
	public boolean validarQueEsNumero(String input){
		
		boolean retorno = true;
		
		for(int i=0; i<input.length();i++){
			
			if(		   input.charAt(i)!='1'
					&& input.charAt(i)!='2'
					&& input.charAt(i)!='3'
					&& input.charAt(i)!='4'
					&& input.charAt(i)!='5'
					&& input.charAt(i)!='6'
					&& input.charAt(i)!='7'
					&& input.charAt(i)!='8'
					&& input.charAt(i)!='9'
					&& input.charAt(i)!='0'
					){
				retorno = false;
			}
		}
		
		if(input.contains(" ")){
			retorno = false;
		}
		
		
		return retorno;
		
	}
	
	public boolean validarCampos() throws IllegalArgumentException{
		
				
		//Validacion campos vacios
		if((getTxtbxNombre().getText().equals("")
				|| getListBxDeporte().getItemText(getListBxDeporte().getSelectedIndex()).equals(" ")
				|| getListBoxModalidad().getItemText(getListBxModalidad().getSelectedIndex()).equals(" ")
				|| getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals(" ")
				|| getListBxDeporte().getItemText(getListBxDeporte().getSelectedIndex()).equals("")
				|| getListBoxModalidad().getItemText(getListBxModalidad().getSelectedIndex()).equals("")
				|| getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals(""))){
				
				
			throw new IllegalArgumentException("Debe especificar todos los campos");
		}
		
		//Eligiendo modalidad de sets, valida el ingreso de datos de cantidad de sets
		if(getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals("Sets") 
				&& (getTextBoxCantidadSets().getText().equals("") || getTextBoxCantidadSets().getText().contains(" "))){
			throw new IllegalArgumentException("Debe especificar la cantidad de sets");
		}
		
		else if(getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals("Puntuacion")
				&& (getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().getText().equals("") 
						|| getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().getText().equals(" ") )){
			
			throw new IllegalArgumentException("Debe especificar la cantidad de tantos");
		}
		
		//Modalidad liga, checkbox de empates activado, valida que se ingresen todos los datos de puntuaciones
		if(getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex()).equals("Liga") 
				&& getChckbxPuntosEmpate().getValue()
				&& (getTextBoxPtosPartidoGanado().getText().equals("") || getTextBoxPtsPorPresentarse().getText().equals("") || getTextBoxPtosEmpate().getText().equals("")
						|| getTextBoxPtosPartidoGanado().getText().equals(" ") || getTextBoxPtsPorPresentarse().getText().equals(" ") || getTextBoxPtosEmpate().getText().equals(" "))){
			
			throw new IllegalArgumentException("Especifique puntos para modalidad liga");
		}
				
		//Modalidad liga, checkbox de empates no activado, valida que se ingresen todos los datos de puntuaciones
		else if(getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex()).equals("Liga") 
				&& !getChckbxPuntosEmpate().getValue()
				&& (getTextBoxPtosPartidoGanado().getText().equals("") || getTextBoxPtsPorPresentarse().getText().equals("")
						|| getTextBoxPtosPartidoGanado().getText().equals(" ") || getTextBoxPtsPorPresentarse().getText().equals(" "))){
			
			throw new IllegalArgumentException("Especifique puntos para modalidad liga");
		}
		
		if(getListBxModalidad().getItemText(getListBxModalidad().getSelectedIndex()).equals("Liga")){
			
			if(getChckbxPuntosEmpate().getValue()){
				
				if(!(validarQueEsNumero(getTextBoxPtosPartidoGanado().getText()) 
						&& validarQueEsNumero(getTextBoxPtsPorPresentarse().getText())
						&& validarQueEsNumero(getTextBoxPtosEmpate().getText()))){
					
					throw new IllegalArgumentException("Los puntos especificados deben ser numeros");
				}
				
			}
			else {
				
				if(!(validarQueEsNumero(getTextBoxPtosPartidoGanado().getText()) && validarQueEsNumero(getTextBoxPtsPorPresentarse().getText()))){
					
					throw new IllegalArgumentException("Los puntos especificados deben ser numeros");

				}
				
			}
			
		}
		
		if(getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals("Sets")
				&& !validarQueEsNumero(getTextBoxCantidadSets().getText())){
			
			throw new IllegalArgumentException("La cantidad de sets debe ser un numero");
		}
		
		else if(getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals("Puntuacion")
				&& !validarQueEsNumero(getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().getText())){
			throw new IllegalArgumentException("La cantidad de tantos debe ser un numero");
		}
		
		//Validacion que los puntos por partido ganado sea mayor que empatado y por presentarse
		if(getListBxModalidad().getItemText(getListBxModalidad().getSelectedIndex()).equals("Liga")){
			if(getChckbxPuntosEmpate().getValue()){
				
				 if( (Integer.parseInt(getTextBoxPtosPartidoGanado().getText())<=Integer.parseInt(getTextBoxPtosEmpate().getText()) 
					|| Integer.parseInt(getTextBoxPtosPartidoGanado().getText())<=Integer.parseInt(getTextBoxPtsPorPresentarse().getText()))){
				
					throw new IllegalArgumentException("Los puntos por partido ganado deben ser mayores que para partido empatado y por presentarse");
				 }
				 else if(Integer.parseInt(getTextBoxPtosEmpate().getText())<=Integer.parseInt(getTextBoxPtsPorPresentarse().getText())){
					 
					 throw new IllegalArgumentException("Los puntos por partido empatado deben ser mayores que por presentarse");
				 }
				
			}
			
			else {
			
				  if(Integer.parseInt(getTextBoxPtosPartidoGanado().getText())<=Integer.parseInt(getTextBoxPtsPorPresentarse().getText())){
					
					throw new IllegalArgumentException("Los puntos por partido ganado deben ser mayores que por presentarse");
					
				  }
			}
		
		}
			
				
		if(!getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex()).equals("Liga")){
			
			getTextBoxPtosPartidoGanado().setText("-1");
			getTextBoxPtosEmpate().setText("-1");
			getTextBoxPtsPorPresentarse().setText("-1");
		}
		
		else if(getListBoxModalidad().getItemText(getListBoxModalidad().getSelectedIndex()).equals("Liga")
				&& !getChckbxPuntosEmpate().getValue()){
			
			getTextBoxPtosEmpate().setText("-1");
		}
			
			
		if(!getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals("Sets")){
			
			getTextBoxCantidadSets().setText("-1");
		}
		
		if(!getListBxTipoPuntuacion().getItemText(getListBxTipoPuntuacion().getSelectedIndex()).equals("Puntuacion")){
			getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante().setText("-1");
		}
		
		
		//Validacion de cantidad de sets impar
		if((Integer.parseInt(getTextBoxCantidadSets().getText())%2)==0){
			
			throw new IllegalArgumentException("La cantidad de sets debe ser un numero impar");
		}
		
		//Validacion de cantidad de sets mayor a 10
		else if(Integer.parseInt(getTextBoxCantidadSets().getText())>10){
			
			throw new IllegalArgumentException("La cantidad de sets no puede ser mayor a 10");
		}
		
		
		return true;
	}
	
	private ArrayList<DisponibilidadDTO> generarDisponibilidades() throws IllegalArgumentException{
		
		ArrayList<DisponibilidadDTO> listaRetorno = new ArrayList<DisponibilidadDTO>();
		
		if(getListBxLugaresRealizacionElegidos().getItemCount()==0){
			
			throw new IllegalArgumentException("Debe agregar al menos un lugar de realizacion");
		}
		
		for(int i=0;i<getListBxLugaresRealizacionElegidos().getItemCount();i++){
			
			
			DisponibilidadDTO disponibilidad = new DisponibilidadDTO();
			
			int j=1;
			while(getListBxLugaresRealizacionElegidos().getItemText(i).charAt(j)!=':'){
				j++;
			}
			
			disponibilidad.setLugarDeRealizacion(getListBxLugaresRealizacionElegidos().getItemText(i).substring(0,j-15));
			disponibilidad.setCantidad(Integer.parseInt(getListBxLugaresRealizacionElegidos().getItemText(i).substring(j+2, getListBxLugaresRealizacionElegidos().getItemText(i).length())));
			
			listaRetorno.add(disponibilidad);
		}
				
		return listaRetorno;
	}
	
	public void agregarCamposListBoxLugaresDeRealizacion(String deporte){

		
		final CamposListboxServiceAsync cargarCamposListboxLugaresDeRealizacion = GWT.create(CamposListboxService.class);
		final String lbxNombre = "listbxLugaresderealizacion";
	
		AsyncCallback<ArrayList<String>> callback = new AsyncCallback<ArrayList<String>>(){
			
			@Override
			public void onSuccess(ArrayList<String> result) {
						  
				   cargarCamposListbox(getListbx(lbxNombre),result);
				 
				}
			
			@Override
			public void onFailure(Throwable caught) {
						
					Window.alert("Ha ocurrido un error al cargar lugares de realizacion");
				}
				
		};
		
		cargarCamposListboxLugaresDeRealizacion.camposListboxLugaresDeRealizacion(deporte, callback);
		
	}
	
	
	public ListBox getListBxDeporte() {
		
		return listBxDeporte;
	}
	
	public Button getBtnHome() {
		return btnHome;
	}
	public PushButton getPshbtnCancelar() {
		return pshbtnCancelar;
	}
	public ListBox getListBoxModalidad() {
		return listBxModalidad;
	}
	public TextBox getTxtBxPtsPartidoGanado() {
		return textBoxPtosPartidoGanado;
	}
	public TextBox getTxtBxPtsEmpate() {
		return textBoxPtosEmpate;
	}
	public TextBox getTxtBxPtsPorPresentarse() {
		return textBoxPtsPorPresentarse;
	}
	public Label getLblPuntosPorPartido() {
		return lblPuntosPorPartido;
	}
	public CheckBox getChckbxPuntosEmpate() {
		return chckbxPtosEmpate;
	}
	public Label getLblPuntosPorPresentarse() {
		return lblPuntosPorPresentarse;
	}
	public TextArea getTxtAreaReglamento() {
		return textAreaReglamento;
	}
	public Label getLblUsuario() {
		return lblUsuario;
	}

	public Label getLblSalir() {
		return lblSalir;
	}
	
	public TextBox getTxtbxNombre() {
		return txtbxNombre;
	}
	
	public PushButton getPshbtnAceptar() {
		return pshbtnAceptar;
	}
	
	public ListBox getListBxTipoPuntuacion() {
		return listBxTipoPuntuacion;
	}
	
	public TextBox getTextBoxCantidadSets() {
		return textBoxCantidadSets;
	}
	
	public Label getLblCantidadSets() {
		return lblCantidadSets;
	}

	public TextBox getTextBoxPtosPartidoGanado() {
		return textBoxPtosPartidoGanado;
	}

	public TextBox getTextBoxPtosEmpate() {
		return textBoxPtosEmpate;
	}

	public TextBox getTextBoxPtsPorPresentarse() {
		return textBoxPtsPorPresentarse;
	}

	public ListBox getListBxLugaresRealizacion() {
		return listBxLugaresRealizacion;
	}

	/**
	 * @return the listBxModalidad
	 */
	public ListBox getListBxModalidad() {
		return listBxModalidad;
	}

	private void agregarCamposListBox(String listboxNombre){
		
		final CamposListboxServiceAsync cargarCamposListbox = GWT.create(CamposListboxService.class);
		final String lbxNombre = listboxNombre;
	
		AsyncCallback<ArrayList<String>> callback = new AsyncCallback<ArrayList<String>>(){
			
			@Override
			public void onSuccess(ArrayList<String> result) {
											  
				   cargarCamposListbox(getListbx(lbxNombre),result);
				}
			
			@Override
			public void onFailure(Throwable caught) {
					Window.alert("Ha ocurrido un error");
				}
				
		};
		
	   cargarCamposListbox.camposListbox(listboxNombre, callback);
		
	}
	
	private void cargarCamposListbox(ListBox listbox,ArrayList<String> campos){
		
		for(int i=0;i<campos.size();i++){
			listbox.addItem(campos.get(i));
		}
	}
	
	private ListBox getListbx(String listboxNombre){
		
		ListBox retorno;
			
		if(listboxNombre.equals("listbxDeporte")){
			retorno = getListBxDeporte();
		}
		else if(listboxNombre.equals("listbxModalidad")){
			retorno = getListBxModalidad();
		}
		else if(listboxNombre.equals("listbxTipodepuntuacion")){
			retorno = getListBxTipoPuntuacion();
		}
		else if(listboxNombre.equals("listbxLugaresderealizacion")){
			retorno = getListBxLugaresRealizacion();
		}
		else{
			retorno = new ListBox();
		}
		
		return retorno;
	}
	
	/**
	 * @return the textBoxTantosPartidoGanadoPorNoPresentarseContrincante
	 */
	public TextBox getTextBoxTantosPartidoGanadoPorNoPresentarseContrincante() {
		return textBoxTantosPartidoGanadoPorNoPresentarseContrincante;
	}

	/**
	 * @return the tantosPartidoGanadoPorNoPresentarseContrincante
	 */
	public Label getTantosPartidoGanadoPorNoPresentarseContrincante() {
		return TantosPartidoGanadoPorNoPresentarseContrincante;
	}

	/**
	 * @return the pshbtnAgregar
	 */
	public PushButton getPshbtnAgregar() {
		return pshbtnAgregar;
	}

	/**
	 * @return the pshbtnVaciar
	 */
	public PushButton getPshbtnVaciar() {
		return pshbtnVaciar;
	}

	/**
	 * @return the textBoxDisponibilidad
	 */
	public TextBox getTextBoxDisponibilidad() {
		return textBoxDisponibilidad;
	}

	/**
	 * @return the listBxLugaresRealizacionElegidos
	 */
	public ListBox getListBxLugaresRealizacionElegidos() {
		return listBxLugaresRealizacionElegidos;
	}

	
	public void setVisibilidad(boolean estado){
		this.setVisible(estado);
	}
}
